﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ModeloMagiPack.Entidades;
using BLLMagiPack.Managers;

namespace MaGiPack
{
    public partial class FrmModeloCaja : Form
    {
        public FrmModeloCaja()
        {
            InitializeComponent();

            _accionActual = Acciones.alta;
            SeleccionarAccion();
            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
        }

        Acciones _accionActual;
        
        public ModeloCaja ModeloCajaSeleccionado
        {
            get
            {
                ModeloCaja modeloCaja = null;

                if (dgvModeloCajas.SelectedRows.Count > 0)
                {
                    modeloCaja = new ModeloCaja();
                    modeloCaja.IdModeloCaja = (int)dgvModeloCajas.SelectedRows[0].Cells["IdModeloCaja"].Value;

                    BLLModeloCaja bllModeloCaja = new BLLModeloCaja();
                    modeloCaja = bllModeloCaja.TraerModeloCaja(modeloCaja.IdModeloCaja);
                }

                return modeloCaja;
            }
        }

        void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            MessageBox.Show(e.Exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }


        private void CargarDatosSeleccionados()
        {
            if (dgvModeloCajas.SelectedRows.Count > 0 && _accionActual == Acciones.modificacion)
            {
                ModeloCaja seleccionado = ModeloCajaSeleccionado;

                txtCodigo.Text = seleccionado.Codigo;
                txtMedidasInteriores.Text = seleccionado.MedidasInteriores;
                txtMedidasPlancha.Text = seleccionado.MedidasPlancha;
                txtMedidasTrazado.Text = seleccionado.MedidasTrazado;
                txtLibraje.Text = seleccionado.Libraje;
                cboClientes.Text = new BLLCliente().TraerCliente(seleccionado.IdCliente).Nombre;
            }
        }

        private void CargarGrilla()
        {
            BLLModeloCaja bllModeloCaja = new BLLModeloCaja();

            if(cboClientesBuscar.SelectedIndex == 0)
            dgvModeloCajas.DataSource = (from m in bllModeloCaja.TraerModeloCajas()
                                         select new
                                         {
                                             IdModeloCaja = m.IdModeloCaja,
                                             Codigo = m.Codigo,
                                             MedidasInteriores = m.MedidasInteriores,
                                             Libraje = m.Libraje,
                                             Cliente = new BLLCliente().TraerCliente(m.IdCliente).Nombre
                                         }).ToList();
            else
                dgvModeloCajas.DataSource = (from m in bllModeloCaja.TraerModeloCajas((int)(cboClientesBuscar.SelectedItem as Cliente).IdCliente)
                                             select new
                                             {
                                                 IdModeloCaja = m.IdModeloCaja,
                                                 Codigo = m.Codigo,
                                                 MedidasInteriores = m.MedidasInteriores,
                                                 Libraje = m.Libraje,
                                                 Cliente = new BLLCliente().TraerCliente(m.IdCliente).Nombre
                                             }).ToList();
        }
        
        private void SeleccionarAccion()
        {
            if (_accionActual.CompareTo(Acciones.alta) == 0)
            {
                this.Text = "Nuevo Modelo Caja";
                btnAgregar.Enabled = false;
                btnEditar.Enabled = true;
                btnRemover.Enabled = true;

                txtCodigo.Enabled = true;
                txtMedidasInteriores.Enabled = true;
            }
            else
            {
                this.Text = "Modificar Modelo Caja";
                btnEditar.Enabled = false;
                btnRemover.Enabled = true;
                btnAgregar.Enabled = true;

                txtCodigo.Enabled = true;
                txtMedidasInteriores.Enabled = true;
            }
        }

        private bool ValidarDatos()
        {
            bool estaOK = true;
            Utilidades.LimpiarErrores(this, errorModeloCaja);
            estaOK = Utilidades.ValidarDatos(this, errorModeloCaja);

            return estaOK;
        }

        private void CargarClientes()
        {
            bsClientes.DataSource = new BLLCliente().TraerClientes().OrderBy(c => c.Nombre).ToList();
        }

        private void CargarClientesFiltro()
        {
            List<Cliente> clientes = new BLLCliente().TraerClientes().OrderBy(c => c.Nombre).ToList();
            clientes.Insert(0, new Cliente() { IdCliente = -1 , Nombre = "-- Seleccione un cliente --" });

            cboClientesBuscar.DataSource = clientes;
        }


        private void btnAgregar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.alta;
            SeleccionarAccion();

            Utilidades.LimpiarControles(gbDatos);
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            CargarGrilla();
        }
        
        private void btnEditar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.modificacion;
            SeleccionarAccion();
            CargarDatosSeleccionados();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (ValidarDatos())
            {
                ModeloCaja modeloCaja;

                if (_accionActual == Acciones.alta)
                    modeloCaja = new ModeloCaja();
                else
                    modeloCaja = ModeloCajaSeleccionado;

                modeloCaja.Codigo = txtCodigo.Text;
                modeloCaja.MedidasInteriores = txtMedidasInteriores.Text;
                modeloCaja.MedidasPlancha = txtMedidasPlancha.Text;
                modeloCaja.MedidasTrazado = txtMedidasTrazado.Text;
                modeloCaja.Libraje = txtLibraje.Text;
                modeloCaja.IdCliente = (int) (cboClientes.SelectedItem as Cliente).IdCliente;

                BLLModeloCaja bllModeloCaja = new BLLModeloCaja();

                switch (_accionActual)
                {
                    case Acciones.alta:
                        bllModeloCaja.CrearModeloCaja(modeloCaja);
                        Utilidades.LimpiarControles(gbDatos);
                        break;
                    case Acciones.modificacion:
                        bllModeloCaja.ModificarModeloCaja(modeloCaja);
                        break;
                    default:
                        break;
                }

                MessageBox.Show("¡Su operación se completó con éxito!", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                CargarGrilla();
            }
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            ModeloCaja ModeloCaja = ModeloCajaSeleccionado;

            if (MessageBox.Show(string.Format("¿Eliminar ModeloCaja {0}?", ModeloCaja.Codigo), "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                BLLModeloCaja bllModeloCaja = new BLLModeloCaja();
                bllModeloCaja.EliminarModeloCaja(ModeloCaja);
                CargarGrilla();
            }
        }

        private void dgvModeloCajas_SelectionChanged(object sender, EventArgs e)
        {
            CargarDatosSeleccionados();
            btnRemover.Enabled = btnEditar.Enabled = dgvModeloCajas.SelectedRows.Count > 0;
        }
        
        private void ModeloCaja_Load(object sender, EventArgs e)
        {
            CargarClientes();
            CargarClientesFiltro();
            CargarGrilla();
        }
    }
}
